package com.rc.web.converter;


import com.rc.pojo.dto.collect.AddCollectDTO;
import com.rc.pojo.po.Activity;
import com.rc.pojo.po.Adoption;
import com.rc.pojo.po.Collect;
import com.rc.pojo.po.Farm;
import com.rc.pojo.vo.collect.CollectVO;
import org.mapstruct.BeanMapping;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

/**
 * 收藏信息转换器
 * 使用MapStruct实现DTO、PO、VO之间的转换
 */
@Mapper(componentModel = "spring") // 声明为Spring组件
public interface CollectConverter {

    /**
     * 将新增DTO转换为PO
     * @param dto 收藏新增数据传输对象
     * @return 收藏持久化对象
     */
    Collect dto2DO(AddCollectDTO dto);

    /**
     * 将收藏PO转换为VO
     * @param collect 收藏持久化对象
     * @return 收藏视图对象
     */
    CollectVO toVO(Collect collect);

    /**
     * 将农场信息转换为收藏PO
     * @param farm 农场持久化对象
     * @return 收藏持久化对象
     */
    @BeanMapping(ignoreByDefault = true) // 忽略默认映射
    @Mapping(target = "itemId", source = "id") // 农场ID映射到收藏项ID
    @Mapping(target = "cover",   expression = "java(farm.getImgs().stream().findFirst().orElse(new com.rc.common.model.ImageModel()).getUrl())") // 获取第一张图片作为封面
    @Mapping(target = "title", source = "name") // 农场名称映射到标题
    @Mapping(target = "tips", source = "address") // 农场地址映射到提示信息
    @Mapping(target = "description", source = "description") // 描述信息直接映射
    @Mapping(target = "type", expression = "java(0)") // 设置类型为0（农场）
    Collect farm2PO(Farm farm);

    /**
     * 将活动信息转换为收藏PO
     * @param activity 活动持久化对象
     * @return 收藏持久化对象
     */
    @BeanMapping(ignoreByDefault = true) // 忽略默认映射
    @Mapping(target = "itemId", source = "id") // 活动ID映射到收藏项ID
    @Mapping(target = "cover",   expression = "java(activity.getImgs().stream().findFirst().orElse(new com.rc.common.model.ImageModel()).getUrl())") // 获取第一张图片作为封面
    @Mapping(target = "title", source = "title") // 活动标题映射到标题
    @Mapping(target = "tips", source = "description") // 活动描述映射到提示信息
    @Mapping(target = "description", source = "description") // 描述信息直接映射
    @Mapping(target = "type", expression = "java(1)") // 设置类型为1（活动）
    Collect activity2PO(Activity activity);

    /**
     * 将领养信息转换为收藏PO
     * @param adoption 领养持久化对象
     * @return 收藏持久化对象
     */
    @BeanMapping(ignoreByDefault = true) // 忽略默认映射
    @Mapping(target = "itemId", source = "id") // 领养ID映射到收藏项ID
    @Mapping(target = "cover",   expression = "java(adoption.getImgs().stream().findFirst().orElse(new com.rc.common.model.ImageModel()).getUrl())") // 获取第一张图片作为封面
    @Mapping(target = "title", source = "title") // 领养标题映射到标题
    @Mapping(target = "tips", source = "description") // 领养描述映射到提示信息
    @Mapping(target = "description", source = "description") // 描述信息直接映射
    @Mapping(target = "type", expression = "java(3)") // 设置类型为3（领养）
    Collect adoption2PO(Adoption adoption);
}
